# 对两个参数的操作进行符号的输出
def mark(flag):
    def out_func(func):
        def inner_func(a, b):
            print(f"进行了两数相{flag}的操作，结果为{func(a, b)}")

        return inner_func

    return out_func


"""                   
@mark("+") 分析解读:
当函数执行到带参数装饰器 @mark("+") 这句时，分两步执行：
    1.执行@mark("+")这个函数，把相应的参数'+'传给flag，并且得到返回值out_func函数名
    2.将@与out_func结合，得到之前熟悉的标准版的装饰器，按照装饰器的执行流程执行。
                                                1.add = out_func(add)
                                                2.add(1,2) <=> inner_func(1,2)
    使用带有参数的装饰器，其实是在装饰器外面又包裹了一个函数，使用该函数接收参数，返回是装饰器，因为 @ 符号需要配合装饰器实例使用
"""


@mark("+")
def add(a, b):
    return a + b


@mark("-")
def sub(a, b):
    return a - b


add(1, 2)
sub(3, 2)
